package com.huqing.icu.dto;

import com.baomidou.mybatisplus.annotation.TableLogic;
import com.huqing.icu.base.PageDto;
import com.huqing.icu.enums.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.List;

@Data
public class HouseQueryDto extends PageDto {

    /******************************  房子的基本信息  ************************************/
    @Schema(name = "id", description = "主键ID")
    private Long id;

    @Schema(name = "userId", description = "用户id")
    private Long userId;

    @Schema(name = "title", description = "标题")
    private String title;

    @Schema(name = "description", description = "房子介绍")
    private String description;

    @Schema(name = "houseCommunityName", description = "小区名字")
    private String houseCommunityName;

    @Schema(name = "minArea", description = "房子的最小面积")
    private BigDecimal minArea;

    @Schema(name = "maxArea", description = "房子的最大面积")
    private BigDecimal maxArea;

    @Schema(name = "minFloor", description = "房子最小楼层")
    private Integer minFloor;

    @Schema(name = "maxFloor", description = "房子最大楼层")
    private Integer maxFloor;

    @Schema(name = "minBuildYear", description = "房子的最小建造时间，必须是整数，单位为年")
    private Integer minBuildYear;

    @Schema(name = "maxBuildYear", description = "房子的最大建造时间，必须是整数，单位为年")
    private Integer maxBuildYear;

    /**
     * @see HouseTypeEnum
     */
    @Schema(name = "houseType", description = "房子类型 1-自建房 2-城中村 3-公寓 4-普通小区 5-高档小区 6-大别墅")
    private List<Integer> houseTypeList;

    /**
     * @see HouseDirectionEnum
     */
    @Schema(name = "directionList", description = "朝向")
    private List<Integer> directionList;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "isShareRent", description = "是否合租 0-否(整租) 1-是(合租)")
    private Integer isShareRent;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "isLoft", description = "是否为复式 0-否 1-是")
    private Integer isLoft;

    @Schema(name = "rootNumList", description = "房间数量")
    private List<Integer> rootNumList;

    @Schema(name = "hallNumList", description = "厅数量")
    private List<Integer> hallNumList;

    @Schema(name = "toiletNum", description = "卫生间数量")
    private List<Integer> toiletNumList;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "isLongRental", description = "是否支持长租 0-否(短租) 1-是(长租)")
    private Integer isLongRental;

    @Schema(name = "minRentMonthNum", description = "可最少短租几个月")
    private Integer minRentMonthNum;

    @Schema(name = "maxRentMonthNum", description = "可最多短租几个月")
    private Integer maxRentMonthNum;


    /******************************  房子的设施  ************************************/
    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "hasElevator", description = "是否有电梯 0-否 1-是")
    private Integer hasElevator;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "hasBed", description = "是否有床 0-否 1-是")
    private Integer hasBed;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "hasWardrobe", description = "是否有衣柜 0-否 1-是")
    private Integer hasWardrobe;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "hasTV", description = "是否有电视 0-否 1-是")
    private Integer hasTV;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "hasAirConditioning", description = "是否有空调 0-否 1-是")
    private Integer hasAirConditioning;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "hasFridge", description = "是否有冰箱 0-否 1-是")
    private Integer hasFridge;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "hasWashingMachine", description = "是否有洗衣机 0-否 1-是")
    private Integer hasWashingMachine;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "hasNaturalGas", description = "是否有天然气 0-否 1-是")
    private Integer hasNaturalGas;

    /**
     * @see IsOrNotEnum
     */
    @Schema(name = "hasWaterHeater", description = "是否有 0-否 1-是")
    private Integer hasWaterHeater;


    /******************************  房子的价格相关：水电、业务、押金、停车费等  ************************************/


    /**
     * @see HouseWaterElectricityTypeEnum
     */
    @Schema(name = "waterElectricityType", description = "水电类型 1-自定义 2-民水民电 3-商水商电")
    private Integer waterElectricityType;

   /* @Schema(name = "waterPrice", description = "水的价格")
    private BigDecimal waterPrice;

    @Schema(name = "electricityPrice", description = "电的价格")
    private BigDecimal electricityPrice;

    @Schema(name = "propertyManageFee", description = "物业费或管理费")
    private BigDecimal propertyManageFee;

    @Schema(name = "agencyPrice", description = "中介费")
    private BigDecimal agencyPrice;*/

    @Schema(name = "minRentPrice", description = "最小租金")
    private BigDecimal minRentPrice;

    @Schema(name = "maxRentPrice", description = "最大租金")
    private BigDecimal maxRentPrice;

    /*@Schema(name = "deposit", description = "押金")
    private BigDecimal deposit;*/

    @Schema(name = "hasPark", description = "是否有停车位 0-否 1-是")
    private Integer hasPark;

    @Schema(name = "minMonthParkPrice", description = "最小的月保停车价格")
    private BigDecimal minMonthParkPrice;

    @Schema(name = "maxMonthParkPrice", description = "最大的月保停车价格")
    private BigDecimal maxMonthParkPrice;


    /******************************  房东的信息  ************************************/


    @Schema(name = "houseOwnerList", description = "房东身份 1-转租租客 2-中介 3-二手房东 4-业主(一手房东)")
    private List<Integer> houseOwnerList;


    /******************************  房子的状态相关：审核状态、是否上架/下架  ************************************/

    /**
     * @see HouseDownStatusEnum
     */
    @Schema(name = "downStatus", description = "是否下架 0-否 1-是")
    private Integer downStatus;

    /**
     * @see HouseDownReasonEnum
     */
    @Schema(name = "downReasonType", description = "下架原因")
    private Integer downReasonType;


    /******************************  房子的时间相关：创建时间、发布时间  ************************************/

    @Schema(name = "startPublishDate", description = "开始发布时间")
    private Timestamp startPublishDate;

    @Schema(name = "endPublishDate", description = "结束发布时间")
    private Timestamp endPublishDate;


    /**
     * @see com.huqing.icu.enums.DeleteStatusEnum
     */
    @Schema(name = "isDeleted", description = "是否已删除 0-否 1-是")
    @TableLogic
    private Integer isDeleted;


    /****************************房源审核状态*******************************/

    /**
     * @see IsOrNotEnum 这是我自己加的字段，表中并没有这个字段
     */
    @Schema(name = "queryApprove", description = "是否查询审核状态")
    private Integer queryApprove;
    /**
     * @see com.huqing.icu.enums.HouseApproveStatusEnum
     */
    @Schema(name = "approveStatusList", description = "审核状态 20-待审核 30-审核通过 40-审核未通过")
    private List<Integer> approveStatusList;

    @Schema(name = "approveStatus", description = "审核状态 20-待审核 30-审核通过 40-审核未通过")
    private Integer approveStatus;

    @Schema(name = "approveUserId", description = "审核人id")
    private Long approveUserId;

    /****************************排序类型*******************************/
    /**
     * @see HouseListSortTypeEnum
     */
    @Schema(name = "sortType", description = "sortType")
    private Integer sortType;
}
